/******************************************************************************
** 公司名称：天津柯迪斯科技有限公司
** 版权信息：
** 文件名称： App_Protocol_ANANDA_V11.h
** 模块名称： 安乃达V11协议处理模块
** 版 本 号： V1.0
** 作    者： 蒲磊
**
** 修改记录： 版本     修改人      时间         修改内容
******************************************************************************/
#ifndef __APP_PROTOCOL_ANANDA_H_
#define __APP_PROTOCOL_ANANDA_H_

/******************************************************************************
* 头文件
******************************************************************************/
#include "bsp.h"
/******************************************************************************
* 宏定义 ('#define')
******************************************************************************/
#define V139                    0
#define V142                    1
#define VER                     V142    /*安乃达协议版本号*/
/*V1.3.9，轮径只可读，不可调，限速不可读，不可调*/
/*V1.4.2，轮径限速可读，可调*/

#define PUSH_SPEED              60      /*助力推行速度，6.0km/h*/
#define READ_TORQUE_EN          0       /*是否读取脚踏力矩值*/
#define READ_CADENCE_EN         0       /*是否读取踏频*/
#define READ_TREADLEPOWER_EN    0       /*是否读取脚踏功率*/
#define READ_MOTORPOWER_EN      1       /*是否读取电机功率*/
#define READ_SPEED_EN           1       /*是否读取速度*/
#define READ_AVGSPEED_EN        1       /*是否读取平均速度*/
#define READ_MAXSPEED_EN        1       /*是否读取最大速度*/
#define READ_TRIPTIME_EN        1       /*是否读取骑行时间*/
#define READ_TRIP_EN            1       /*是否读取TRIP里程*/
#define READ_ODO_EN             1       /*是否读取ODO里程*/
#define READ_CONSUMPTION_EN     0       /*是否读取瞬时功耗*/
#define READ_TRIPCONSUMPTION_EN 0       /*是否读取平均功耗*/
#define READ_HARDWAREVER_EN     0       /*是否读取硬件版本号*/
#define READ_SOFTWAREVER_EN     0       /*是否读取软件版本号*/
#define READ_SN_EN              0       /*是否读取SN号*/
#define READ_RANGE_EN           0       /*是否读取剩余里程*/
#define READ_HANDLE_LIMIT_EN    0       /*是否读取转把限速值*/

#if VER == V142
#define READ_SPEED_LIMIT_EN     1       /*是否读取限速值*/
#define READ_WHEELSIZE_EN       1       /*是否读取轮径值*/
#elif VER == V139
#define READ_SPEED_LIMIT_EN     0       /*是否读取限速值*/
#define READ_WHEELSIZE_EN       0       /*是否读取轮径值*/
#endif


/******************************************************************************
* 类型定义 ('typedef')
******************************************************************************/
typedef struct
{
    uint16_t 	Current;
    uint16_t 	Speed_Cnt;
    uint8_t		ErrCode;
    uint8_t		Volt_Level;
    uint16_t    Torque;
    uint16_t    Cadence;
    uint16_t    TreadlePower;
    uint16_t    MotorPower;
    uint16_t    Speed;
    uint16_t    AvgSpeed;
    uint16_t    MaxSpeed;
    uint16_t    TripTime;
    uint32_t    Trip;
    uint32_t    ODO;
    uint16_t    Consumption;
    uint16_t    TripConsumption;
    uint8_t     HardwareVer[12];
    uint8_t     SoftwareVer[12];
    uint8_t     SN[16];
    uint8_t     Range;
    uint16_t    Speed_Limit;
    uint16_t    Handle_Speed_Limit;
    uint16_t    WheelSize;
    uint8_t     WheelSize_Index;

} stRECEIVED_DATA;


typedef struct
{
    uint8_t		Lamp;                   /*大灯状态*/
    uint8_t		Walk;                   /*助推状态*/
    uint8_t		Pas;                    /*档位*/
    uint8_t     Mode;                   /*模式*/

    uint16_t    Set_WheelSize;          /*轮径值，0.1Inch*/
    uint16_t    Set_Speed_Limit;        /*限速值，分辨率：0.1Km/h*/
    uint16_t    Set_Handle_Limit;       /*转把限速值*/
    uint16_t    Set_AvgSpeed;           /*要写入控制器的平均速度*/
    uint16_t    Set_MaxSpeed;           /*要写入控制器的最高速度*/
    uint16_t    Set_TripTime;           /*要写入控制器的骑行时间*/
    uint32_t    Set_Trip;               /*要写入控制器的单次里程*/
    uint8_t     Set_SOC;                /*要写入控制器的SOC*/
    uint16_t    Set_TripConsumption;    /*要写入控制器的平均功耗*/

} stSEND_DATA;

typedef enum
{
    Send_Stop 			= 0,
    Send_Run_Data,
    Send_Config_Data,
    Send_Config_Data_OneTime,
} enSEND_DATA_TYPE;
/******************************************************************************
* 全局变量声明
******************************************************************************/

/******************************************************************************
* 函数声明
******************************************************************************/
void vPROTOCOL_Get_OneFrame(uint8_t *pData,uint16_t Len);
void vPROTOCOL_Loop(void);
void vPROTOCOL_Send_Run_Data(void);
void vPROTOCOL_Send_Config_Data(void);
void vPROTOCOL_Send_Config_Data_OneTime(void);

void vPROTOCOL_Set_ClearTrip(void);
void vPROTOCOL_Set_Lamp(uint8_t State);
void vPROTOCOL_Set_Pas(int8_t Pas);
void vPROTOCOL_Set_Speed_Limit(uint16_t Speed);
void vPROTOCOL_Set_Wheel(uint16_t Wheel);
void vPROTOCOL_Set_Handle_Limit(uint16_t Speed);
void vPROTOCOL_Set_Mode(uint8_t Mode);
void vPROTOCOL_Set_Value_When_ExitSetting(void);

uint8_t ucPROTOCOL_Get_Volt_Level(void);
uint16_t usPROTOCOL_Get_Current(void);
uint16_t usPROTOCOL_Get_Speed_Cnt(void);
uint16_t usPROTOCOL_Get_Speed(void);
uint16_t usPROTOCOL_Get_Speed_Max(void);
uint16_t usPROTOCOL_Get_Speed_Avg(void);
uint16_t usPROTOCOL_Get_MotorPower(void);
uint32_t ulPROTOCOL_Get_Trip(void);
uint32_t ulPROTOCOL_Get_ODO(void);
uint16_t usPROTOCOL_Get_TripTime(void);
uint8_t usPROTOCOL_Get_Range(void);
uint16_t usPROTOCOL_Get_Handle_Limit(void);
uint16_t usPROTOCOL_Get_Speed_Limit(void);
uint16_t usPROTOCOL_Get_WheelSize(void);

uint8_t ucPROTOCOL_Get_Errcode(void);
void vPROTOCOL_Send(void);

void vPROTOCOL_ResetCommunicationOverTime(void);
void vPROTOCOL_Set_Value_When_PowerOn(void);
int8_t cPROTOCOL_Get_Soc(void);
void vPROTOCOL_Set_Pas_Range(int8_t Pas_Range);

#endif
